package main

import (
	"encoding/json"
	"fmt"
	"math/rand"
	"os"
	"time"
)

/*
使用go编写随机点名系统
切片类型存放全班同学的名字
["zhangsan","lisi"]
随机抽取切片中的名字回答问题
用户按任意键，不限次数随机抽取切片中的某一个同学名字回答问题
按q退出，或者切片里面所有的同学都已经被抽到
即抽取到的同学就从切片中删除
 */

func main(){
	//先设置一个数组，用来存放全班同学的名字
	stu_name := []string{"zhangsan","lisi","wangwu","zhaoliu"}

	//读取点名信息
	stu_named, err := os.ReadFile("stu_named.json")
	if err != nil {
		fmt.Println("读取文件失败:",err)
	}
	//json --> map
	var stuinfo map[string]int
	err = json.Unmarshal([]byte(stu_named),&stuinfo)
	if err != nil {
		fmt.Println("json转换失败:",err)
	}

	flag := 1

	//时间戳   从1970年1月1日
	//加入时间种子
	rand.Seed(time.Now().UnixNano())

	//所有同学都被抽到就自动退出
	for len(stu_name)>0{
		var choice string
		fmt.Println("按任意键抽取学生姓名(按q退出):")
		fmt.Scanln(&choice)
		if choice == "q"{
			flag = 0
			break
		}else {
			//这里随机生成一个不超过stu_name数组长度的数，生成的数就当作索引，再通过索引来获取对应位置的学生姓名
			index := rand.Intn(len(stu_name))
			fmt.Printf("被抽中的学生是：%s \n", stu_name[index])

			//通过切片的方式删除这个被抽取到的元素
			stu_name = append(stu_name[:index], stu_name[index+1:]...)
			//点名次数+1
			stuinfo[stu_name[index]] += 1
			//map --> json
			stuJsoninfo, err := json.Marshal(stuinfo)
			if err != nil {
				fmt.Println("map转换失败:",err)
			}
			//写入文件
			err = os.WriteFile("stu_named.json",stuJsoninfo,0644)
			if err != nil {
				fmt.Println("写入失败:",err)
			}

		}
	}
	if flag == 1 {
		fmt.Println("所有同学都被抽过了")
	}
}


//func read() map[string]int {
//	//读取文件
//	username, err := os.ReadFile("")
//	if err != nil {
//		fmt.Println("json文件读取错误",err)
//		return make(map[string]int)
//	}
//	//json --> map
//	var userdata map[string]int
//	err = json.Unmarshal( []byte(username),&userdata )
//	if err != nil {
//		fmt.Println("json转换出错")
//	}
//	return userdata
//}
//
//func write(userInfo map[string]int) {
//	// map->json
//	userJsonFile, err := json.MarshalIndent(userInfo, "", " ")
//	if err != nil {
//		fmt.Println("Map转换错误:", err)
//	}
//	// 写入
//	err = os.WriteFile("./homework/rollCall.json", userJsonFile, 0644)
//	if err != nil {
//		fmt.Println("Json写入错误:", err)
//	}
//}



